package org.ala.shopping_test.shopping_center.repository.category.dao;

import org.ala.tiktools.mybatis.pager.Pagement;
import java.util.List;
import org.ala.shopping_test.shopping_center.repository.category.entity.ShoppingCategoryDO;
import org.ala.tiktools.mybatis.pager.Pager;
import org.ala.shopping_test.shopping_center.repository.category.entity.ShoppingCategoryFields;
import org.apache.ibatis.annotations.Mapper;
import org.ala.tiktools.mybatis.commons.AbstractMultipUpdate;
import org.ala.shopping_test.shopping_center.repository.category.query.ShoppingCategoryQuery;
import org.ala.shopping_test.shopping_center.repository.category.orderBy.ShoppingCategoryOrderBy;
import org.apache.ibatis.annotations.Param;

/**
 *	Dao (shopping_category)
 *  品类表
 *
 *	@author 骆毅 (ala)
 *	@date 2025-03-17 11:51:36
 */
@Mapper
public interface ShoppingCategoryMapper {

    /**
     *  查询全部数据（慎用！！！）
     */
    List<ShoppingCategoryDO> findAll(@Param("fields") ShoppingCategoryFields fields);

    /**
     *  条件查询
     *  <p> 多个query之间是or的关系
     */
    List<ShoppingCategoryDO> findByQuery(@Param("fields") ShoppingCategoryFields fields, @Param("query") ShoppingCategoryQuery query);
    /**
     *  条件查询
     *  <p> 多个query之间是or的关系
     */
    List<ShoppingCategoryDO> findByQuery(
                @Param("fields") ShoppingCategoryFields fields,
                @Param("orderBy") ShoppingCategoryOrderBy orderBy,
                @Param("query") ShoppingCategoryQuery query);

    /**
     *  查询总数（慎用！！！）
     */
    int count();
    /**
     *  条件查询数量
     *  <p> 多个query之间是or的关系
     */
    int countByQuery(@Param("fields") ShoppingCategoryFields fields, @Param("query") ShoppingCategoryQuery query);
    /**
     *  分页查询
     *  <p> 多个query之间是or的关系
     */
    @Pagement(count="countByQuery")
    Pager<ShoppingCategoryDO> findByPage(
                @Param("fields") ShoppingCategoryFields fields,
                @Param("page") Pager<ShoppingCategoryDO> pager,
                @Param("query") ShoppingCategoryQuery query);
    /**
     *  分页查询
     *  <p> 多个query之间是or的关系
     */
    @Pagement(count="countByQuery")
    Pager<ShoppingCategoryDO> findByPage(
                @Param("fields") ShoppingCategoryFields fields,
                @Param("page") Pager<ShoppingCategoryDO> pager,
                @Param("orderBy") ShoppingCategoryOrderBy orderBy,
                @Param("query") ShoppingCategoryQuery query);


    /**
     *  插入
     *  <p> 如果存在唯一自增主键字段，则insert完成后该字段保存该条记录自增的值
     */
    void insert(@Param("entity") ShoppingCategoryDO entity);
    /**
     *  批量插入
     *  <p> 如果存在唯一自增主键字段，则insert完成后该字段保存该条记录自增的值
     */
    void multipleInsert(@Param("entities") List<ShoppingCategoryDO> entities);


    /**
     *  修改
     *  <p> 多个query之间是or的关系
     */
    int update(@Param("entity") ShoppingCategoryDO entity, @Param("query") ShoppingCategoryQuery query);
    /**
     *  批量修改
     *  <p> 每个MultipleUpdate对应一个update语句
     */
    int multipleUpdate(@Param("updates") List<MultipleUpdate> multipleUpdates);


    /**
     *  删除
     */
    int delete(@Param("query") ShoppingCategoryQuery query);


    /**
     *  批量修改参数
     */
    public static class MultipleUpdate extends AbstractMultipUpdate<ShoppingCategoryDO, ShoppingCategoryQuery> {
        public MultipleUpdate(ShoppingCategoryDO entity, ShoppingCategoryQuery query) {
            super(entity, query);
        }
        public static MultipleUpdate build(ShoppingCategoryDO entity, ShoppingCategoryQuery query) {
            return new MultipleUpdate(entity, query);
        }
        /**
         *  copy（注：这是浅拷贝）
         */
        public MultipleUpdate copy() {
            return new MultipleUpdate(entity.copy(), query.copy());
        }
    }
}